﻿// Doc-Encode UTF8-BOM, Space(4), Unix(LF)
#include "himpp_v4.h"
#include "klbmem/klb_mem.h"
#include "klua/CKlua.hpp"
#include "himpp_extension.h"
#include "hiobj.h"

#include "hi_comm_vb.h"
#include "mpi_vb.h"


//////////////////////////////////////////////////////////////////////////
// 导出函数

static int hivb_Init(lua_State* L)
{
    int ret = HI_MPI_VB_Init();

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}

static int hivb_Exit(lua_State* L)
{
    int ret = HI_MPI_VB_Exit();

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}

static int hivb_SetConfig(lua_State* L)
{
    hiobj_t* ptr = lua_checkhiobj(L, 1, HIOBJ_mem1, "VB_CONFIG_S");

    int ret = HI_MPI_VB_SetConfig((const VB_CONFIG_S*)ptr->data);

    lua_pushinteger(L, ret);
    return 1;   // 1 个返回值
}

static int hivb_GetConfig(lua_State* L)
{
    hiobj_t* ptr = new_hiobj_mem(L, HIOBJ_mem1, "VB_CONFIG_S");

    HI_S32 ret = HI_MPI_VB_GetConfig((VB_CONFIG_S*)ptr->data);

    lua_pushinteger(L, ret);
    lua_pushhiobj_table(L, ptr);
    return 2;
}

//////////////////////////////////////////////////////////////////////////
// 常量定义

static void hivb_define(lua_State* L)
{
    // VB_REMAP_MODE_E
    HIMPP_DEFINE_INTEGER(L, VB_REMAP_MODE_NONE);
    HIMPP_DEFINE_INTEGER(L, VB_REMAP_MODE_NOCACHE);
    HIMPP_DEFINE_INTEGER(L, VB_REMAP_MODE_CACHED);
    HIMPP_DEFINE_INTEGER(L, VB_REMAP_MODE_BUTT);
}

//////////////////////////////////////////////////////////////////////////
// 库

KLB_API int luaopen_himpp_hivb(lua_State* L)
{
    static luaL_Reg lib[] =
    {
        { "Init",           hivb_Init },
        { "Exit",           hivb_Exit },

        { "SetConfig",      hivb_SetConfig },
        { "GetConfig",      hivb_GetConfig },

        { NULL,             NULL }
    };

    // 创建导出库函数
    luaL_newlib(L, lib);

    // 常量
    hivb_define(L);

    return 1;
}
